using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Look.Imagem.Entidades;

namespace MakeIT.Look.Imagem.Negocios
{
	public partial class LookDAOT : DAOT
	{

		public ParceiroVO getParceiro(int? idParceiro, string parceiro)
		{
			ParceiroVO parceiroVO = null;
			List<ParceiroVO> listParceiroVOs = getParceiros(idParceiro, parceiro, null);
			if (listParceiroVOs != null && listParceiroVOs.Count > 0)
			{
				parceiroVO = listParceiroVOs[0];
			}
			return parceiroVO;
		}

		public ParceiroVO getParceiro(int? idParceiro)
		{
			return getParceiro(idParceiro, null);
		}

		public List<ParceiroVO> getParceiros()
		{
			return getParceiros(null, null, null);
		}

		public List<ParceiroVO> getParceiros(int? idParceiro)
		{
			return getParceiros(idParceiro, null, null);
		}

		public List<ParceiroVO> getParceiros(int? idParceiro, string parceiro, string descricao)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT par.idParceiro as par_idParceiro, par.parceiro as par_parceiro, par.descricao as par_descricao, par.url as par_url, par.nomeUrl as par_nomeUrl, par.ativo as par_ativo, par.cadastro as par_cadastro, par.cadastradoPor as par_cadastradoPor, par.edicao as par_edicao, par.editadoPor as par_editadoPor  ");
			query.AppendLine("FROM parceiro as par ");
			if (idParceiro != null)
			{
				query.AppendLine(where + "par.idParceiro=@idParceiro ");
				where = "AND ";
			}
			if (parceiro != null)
			{
				query.AppendLine(where + "par.parceiro LIKE @parceiro ");
				where = "AND ";
			}
			if (descricao != null)
			{
				query.AppendLine(where + "par.descricao=@descricao ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY par.parceiro ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idParceiro!= null) cmd.Parameters.Add(getParameter(cmd, "@idParceiro", idParceiro));
			if (parceiro!= null) cmd.Parameters.Add(getParameter(cmd, "@parceiro", "%"+parceiro+"%"));
			if (descricao!= null) cmd.Parameters.Add(getParameter(cmd, "@descricao", descricao));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<ParceiroVO> listParceiro = new List<ParceiroVO>();

				while (reader.Read())
				{
					ParceiroVO parceiroVO = ParceiroVO.CreateVO();
					parceiroVO.idParceiro = reader.GetInt32(reader.GetOrdinal("par_idParceiro"));
					parceiroVO.parceiro = reader.GetString(reader.GetOrdinal("par_parceiro"));
					if (!reader.IsDBNull(reader.GetOrdinal("par_descricao")))
						parceiroVO.descricao = reader.GetString(reader.GetOrdinal("par_descricao"));
					if (!reader.IsDBNull(reader.GetOrdinal("par_url")))
						parceiroVO.url = reader.GetString(reader.GetOrdinal("par_url"));
					if (!reader.IsDBNull(reader.GetOrdinal("par_nomeUrl")))
						parceiroVO.nomeUrl = reader.GetString(reader.GetOrdinal("par_nomeUrl"));
					parceiroVO.ativo = reader.GetString(reader.GetOrdinal("par_ativo")).Equals("S");
					parceiroVO.cadastro = reader.GetDateTime(reader.GetOrdinal("par_cadastro"));
					parceiroVO.cadastradoPor = reader.GetString(reader.GetOrdinal("par_cadastradoPor"));
					parceiroVO.edicao = reader.GetDateTime(reader.GetOrdinal("par_edicao"));
					parceiroVO.editadoPor = reader.GetString(reader.GetOrdinal("par_editadoPor"));


					listParceiro.Add(parceiroVO);
				}
				reader.Close();
				return listParceiro;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setParceiro(ParceiroVO parceiroVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE parceiro ");
			query.AppendLine("SET parceiro=@parceiro, descricao=@descricao, url=@url, nomeUrl=@nomeUrl, ativo=@ativo,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idParceiro=@idParceiro ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idParceiro", parceiroVO.idParceiro));
			cmd.Parameters.Add(getParameter(cmd, "@parceiro", parceiroVO.parceiro));
			if (parceiroVO.descricao == null)
				cmd.Parameters.Add(getParameter(cmd, "@descricao", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@descricao", parceiroVO.descricao));
			if (parceiroVO.url == null)
				cmd.Parameters.Add(getParameter(cmd, "@url", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@url", parceiroVO.url));
			if (parceiroVO.nomeUrl == null)
				cmd.Parameters.Add(getParameter(cmd, "@nomeUrl", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@nomeUrl", parceiroVO.nomeUrl));
			cmd.Parameters.Add(getParameter(cmd, "@ativo", (parceiroVO.ativo==null?" ":(parceiroVO.ativo.Value?"S":"N"))));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", parceiroVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", parceiroVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", parceiroVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", parceiroVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newParceiro(ParceiroVO parceiroVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO parceiro ");
			query.AppendLine("  ( parceiro, descricao, url, nomeUrl, ativo, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @parceiro, @descricao, @url, @nomeUrl, @ativo, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@parceiro", parceiroVO.parceiro));
			if (parceiroVO.descricao == null)
				cmd.Parameters.Add(getParameter(cmd, "@descricao", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@descricao", parceiroVO.descricao));
			if (parceiroVO.url == null)
				cmd.Parameters.Add(getParameter(cmd, "@url", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@url", parceiroVO.url));
			if (parceiroVO.nomeUrl == null)
				cmd.Parameters.Add(getParameter(cmd, "@nomeUrl", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@nomeUrl", parceiroVO.nomeUrl));
			cmd.Parameters.Add(getParameter(cmd, "@ativo", (parceiroVO.ativo==null?" ":(parceiroVO.ativo.Value?"S":"N"))));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", parceiroVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", parceiroVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", parceiroVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", parceiroVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('parceiro') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delParceiro(ParceiroVO parceiroVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM parceiro ");
			query.AppendLine("WHERE idParceiro=@idParceiro ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idParceiro", parceiroVO.idParceiro));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
	}
}
